package com.study.spark.scala.sql

import org.apache.spark.sql.SparkSession

/**
 * SQL 集合函数
 *
 * @author stephen
 * @date 2019-09-27 17:55
 */
object CollectionFunctionDemo {

  def main(args: Array[String]): Unit = {
    val spark = SparkSession
      .builder()
      .appName("CollectionFunctionDemo")
      .master("local[*]")
      .getOrCreate()

    // 隐式转换
    import spark.implicits._
    import org.apache.spark.sql.functions._

    val df = spark.createDataset(Seq(("aaa", List(1, 2, 3)), ("bbb", List(3, 4))))
      .toDF("key", "list")

    // 炸裂
    df.select($"key", explode($"list").as("value")).show()
    // posexplode可以在拆分列的时候把原来的位置信息列出来
    df.select($"key", posexplode($"list").as("position" :: "value" :: Nil)).show()

    spark.stop()
  }
}
